'''
优点：
    1）每个具体产品都对应一个具体工厂类，不需要修改工厂类代码
    2）隐藏了对象创建的实现细节

缺点：
    1）每增加一个具体产品类，就必须增加一个相应的具体工厂类。
'''
from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self,money):
        pass
class Alipay(Payment):
    def pay(self,money):
        print("支付宝支付%d元。"% money)
class WechatPay(Payment):
    def pay(self, money):
        print("微信支付%d元。"% money)



class PaymentFactory(metaclass=ABCMeta):
    @abstractmethod
    def create_payment(self):
        pass
class AlipayFactory(PaymentFactory):
    def create_payment(self):
        return Alipay()
class WechatFactory(PaymentFactory):
    def create_payment(self):
        return WechatPay()



if __name__ == '__main__':

    pf = WechatFactory()
    pf.create_payment().pay(100)